#!/bin/bash

mp4Dir=/lhwl/data/upload/

#通用变量
dateNow=`date +%Y%m%d`
logdir='/lhwl/bin/tmp/';mkdir -p /lhwl/bin/tmp/
logfile=${logdir}/checkLinkFile.${dateNow}
ffreportLog=${logdir}/ffreport.log
size=5  #按一分钟5M的标准计算码率
mp4NewTem=${logdir}/mp4NewTem/
mkdir -p ${mp4NewTem} #压缩临时目录
#rm -f ${mp4NewTem}/*
standSign=700
compressExtName=_y${standSign}.mp4
endSignTargets="y.mp4 y.MP4" #扩展名数组
newCompressSizeLogFile=${logdir}/compressAndForceUseLittleMp4FileFor4.0.newCompressSizeLogFile.${dateNow}
lossFile=${logdir}/checkSourceFileLoss.${dateNow}
compressFilesArray=''
checkSourceFileLossResult=${logdir}/checkSourceFileLossResult.${dateNow}
rm -f ${checkSourceFileLossResult}

#脚本的作用:失效的软连接

echo '###################################'   >> ${logfile}

echo 查找失效的软连接 >> ${logfile}
echo "find ${mp4Dir} -type l" >> ${logfile} #查找全部软连接
linkFileLists=`find ${mp4Dir} -type l`

function killSelf(){
  ps -ef |grep `echo $0`|awk -F ' ' '{print $2}'|xargs kill -9
}

function pass(){
  echo '' >> /dev/null
}

for linkFileList in `echo ${linkFileLists}`
do
  #echo -e "\033[34;32m###################################\033[0m" >> ${logfile} #红色31 绿色32
  #echo 查到的软连接文件为 ${linkFileList}  >> ${logfile}
  
  if [[ -f ${linkFileList} ]];then #判断文件是不是无效的软连接
    pass
  else
    #echo 这个软连接失效了 ll ${linkFileList}  >> ${logfile}
    
    if [[ ${linkFileList##*.}x == 'mp4'x ]];then
      #continue
      echo 这个软连接是mp4的软连接 ll ${linkFileList}  >> ${logfile}
      echo 这个软连接的源文件应该叫 ${linkFileList}.sourceFile >> ${logfile}
      sourceFile=${linkFileList}.sourceFile
      if [[ -f ${sourceFile} ]];then
        echo 软连接的源文件真的存在 ll ${sourceFile} >> ${logfile}
        echo 删除无用的软连接,还原老文件  >> ${logfile}
        echo rm -f ${linkFileList} >> ${logfile}
        echo mv ${sourceFile} ${linkFileList} >> ${logfile}
        rm -f ${linkFileList}
        mv ${sourceFile} ${linkFileList}
        
        #killSelf 
      else
        echo 软连接的源文件不存在 ll ${sourceFile} >> ${logfile}
        killSelf
      fi
      #killSelf
    else
      echo 这个软连接不是mp4的软连接 ll ${linkFileList}  >> ${logfile}
      echo 理论上这个乱七八糟的文件的原始文件名为 ${linkFileList}.sourceFile  >> ${logfile}
      if [[ -f ${linkFileList}.sourceFile ]];then
        echo 这个非mp4文件的原文件真实存在可以还原   >> ${logfile}
        echo rm -f ${linkFileList}  >> ${logfile}
        echo mv ${linkFileList}.sourceFile ${linkFileList} >> ${logfile}
        rm -f ${linkFileList} 
        mv ${linkFileList}.sourceFile ${linkFileList}
      else
        echo 这个非mp4文件的原文件不存在  >> ${logfile}
        killSelf
      fi
    fi
  fi
  continue
  #compressFileArray[${#compressFileArray[@]}]=${compressFile}
  extName=`echo ${compressFile##*.}`
  echo 扩展名是 ${extName} >> ${logfile}
  compressSign=`echo ${compressFile##*_}` #y.mp4 y.MP4 这是真实文件的结尾部分 使用 
  ### 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符，保留右边字符
  echo 压缩标志是 ${compressSign} >> ${logfile}
  notCloudeCompressSign=`echo ${compressFile%"_${compressSign}"}`
  echo 去掉压缩标志后的部分是 ${notCloudeCompressSign} >> ${logfile}
  sourceFileName=${notCloudeCompressSign}.${extName}
  echo 照这么看,原文件是 ${sourceFileName} >> ${logfile}
  #那么这个原文件存在吗?
  if [[ -f ${sourceFileName} ]];then
    pass  #如果原文件名是"文件",那么这个命名正确
  else #这个原文件的文件名,命名不正确
    echo 这个文件的文件命名错误 ${compressFile}  >> ${logfile}
    killSelf
    #按照原规则,找到原文件名
    #原文件名为
    #echo "echo ${compressFile}|sed \"s/_y.${extName}/.${extName}/g\"" >> ${logfile}
    sourceFileName2=`echo ${compressFile}|sed "s/_y.${extName}/.${extName}/g"` #压缩文件的扩展名赋值错误的,下一次处理
    echo 按照原规则,找到原文件名 ${sourceFileName2} >> ${logfile}
    #如果原文件名存在,说明这次定义的原文件名有用,用这个文件名重新定义一次压缩文件名就行了
    if [[ -f ${sourceFileName2} ]];then 
      #太好了,新定义的原文件名有用
      echo 不包括扩展名的文件名是 ${sourceFileName2%".${extName}"} >> ${logfile}
      #新压缩文件名叫啥?
      newCompressFile=${sourceFileName2%".${extName}"}_y.${extName}
      echo 新压缩文件名叫 ${newCompressFile} >> ${logfile}
      if [[ -L ${sourceFileName2} ]];then
        #原文件是软连接
        echo mv ${compressFile} ${newCompressFile} >> ${logfile}
        echo /bin/ln -sf ${newCompressFile} ${sourceFileName2} >> ${logfile}
        killSelf #20200617日运行时,没有进入到这个环节,
        #说明,压缩文件命名错误的文件,都没有进行软连接处理
      else
        #原文件不是软连接
        echo mv ${compressFile} ${newCompressFile} >> ${logfile}
        mv ${compressFile} ${newCompressFile}
      fi
      
    else
      #echo 完蛋,新定义的原文件名不对,哪里错了 ${sourceFileName2} >> ${checkSourceFileLossResult}
      pass
    fi
  fi
  
#按照压缩文件名,找原文件名,修复压缩文件名命名错误的任务

done
echo  ${#compressFileArray[@]} >> ${logfile}
